SetDirectory[NotebookDirectory[]];

Notatnik analizuje zawartość katalogu egzoplanet (planet POZA układem Słonecznym).

egzo2015=Import["data/exoplanet.eu_catalog_2015.csv"]//Rest;

(*egzo2024=Import["data/exoplanet.eu_catalog_2024.csv"]//Rest;*)

egzo2025=Import["data/exoplanet.eu_catalog_2025.csv"]//Rest;

Liczba znanych planet gwałtownie rośnie. Kiedy wykład ten odbywał się po raz pierwszy, było ich 3x mniej!

Length[egzo2015] (* 1901 *)

(*Length[egzo2016] (* 2094 *)*)

(*Length[egzo2024] *)(* 5666 *)

Length[egzo2025] (* 5963 *)

Katalog zawiera potencjalnie liczne informacje na temat każdej planety. Nie wszytkie wielkości są znane, na ogół wiemy tylko o kilku z nich.

head=Import["data/exoplanet.eu_catalog_2025.csv"]//First

Position[head,"eccentricity"] (* Mimośród orbity eliptycznej, pozycja 18 *)

ticks2={{-4,"(10^(-4))"},{-3,0.001`},{-2,0.01`},{-1,0.1`},{0,1},{1,10},{Log10[80],80}}

Aby mieć jakikolwiek punkt odniesienia w zbiorze liczącyum już niemal 6000 planet, wykorzystamy to co “każdy” wie: parametry planet Układu Słonecznego.

planetyUkladSloneczny=PlanetData[]

masyUkladSloneczny=(PlanetData[#,"Mass"]&)/@planetyUkladSloneczny//QuantityMagnitude

W astrofizyce egzoplanet najczęściej używaną jednostkąjest masa Jowisza. Powody wkrótce staną się jasne. Uprzedzając: jest to typowa masa egzoplanety. Masa w katalogu, nie w Galaktyce! Masywne, duże planety po prostu łatwiej wykryć.

mJ=masyUkladSloneczny[[5]] (* Masa Jowisza, piątej planety *)

mUSJ=masyUkladSloneczny/mJ (* Masy planet Układu Słonecznego w masach Jowisza *)

ticks=Join[({Log10@mUSJ,(Rotate[PlanetData[#,"Name"],Pi/2]&)/@planetyUkladSloneczny}//Transpose),{{Log10[13.],Rotate["13 (Subscript[M, J])\n",Pi/2]}},{{Log10[83.],Rotate["0.08 (Subscript[M, ⊙])\n",Pi/2]}}];

(*Export["ticksPlanets.m",ticks]*)

(*ticks=Import["ticksPlanets.m"];*)

m2015=egzo2015[[;;,2]];

(*m2016=egzo2016[[;;,2]];*)

m2025=egzo2025[[;;,3]];

Poniżej widzimy fundamentalny wynik: rozkład prawdopodobieństwa masy egzoplanet. Najważniejsze wyniki:

1. Największy pik, czyli najczęściej spotykany (zwłaszcza w 2015) typ planety to Jowisz. Planety znajdujące się w rejonie tego piku nazywamy Jowiszami lub gazowymi gigantami. W Układzie Słonecznym do tej grupy zaliczamy także Saturna.
2. Drugi największy pik znajduje się pomiędzy masami Ziemi/Wenus oraz Urana/Neptuna. Z innych obserwacji wynika, że znajdujemy tu głównie:
	a) Super-Ziemie  - planety skaliste typu Ziemi, ale wielokrotnie większe
	b) Mini-Neptuny lub gazowe giganty - obiekty typu Urana/Neptuna

Inne rodzaje planet są odkrywane rzadko. NA historgramie widzimy jeszcze tzw. brązowe karły - obiekty o masie powyżej 13 (Subscript[M, J]) ale mniejszej niż 83 (Subscript[M, J])=0.08 (Subscript[M, ⊙]). Stanowią one obiekt przejściowy pomiędzy planetami a gwiazdami i zostały z katalogu exoplanet.eu usunięte w 2025 r.

w1=Histogram[{Legended[Log10[m2015],"2015"],(*Log10[m2016],*)Legended[Log10[m2025],"2024"]},32,Frame->True,FrameTicks->{{All,None},{ticks2,ticks}},BaseStyle->FontSize->24,FrameLabel->{"Masa planety [(Subscript[M, J])]","Ilość planet" },BaseStyle->Blue,AspectRatio->1/2,FrameTicksStyle->Directive[FontSize->12,FontColor->Black],ImageSize->600]

(Legended[, (SwatchLegend["2015", "2024"])])

Z katalogu egzoplanet ostatecznie wyrzuconow 2025 roku  brązowe karły o masie M>13 (Subscript[M, J]) !

DeleteCases[m2015,Missing[_]]//MinMax

DeleteCases[m2025,Missing[_]]//MinMax

(*Export["masyEgzoplanet2024.png",w1,ImageResolution->600,ImageSize->900]*)

(*Export["masyEgzoplanet2024.pdf",w1,ImageResolution->600,ImageSize->900]*)

Teraz przyglądniemy się promieniom oraz średnim gęstością planet.

r2015=egzo2015[[;;,5]]/.""->Infinity;
(*r2016=egzo2016[[;;,5]]/.""->Infinity;*)
r2025=egzo2025[[;;,9]]/.""->Infinity;

ρ2015=(m2015/r2015^3);
(*ρ2016=(m2016/r2016^3);*)
ρ2025=(m2025/r2025^3);

Na histogramie gęstości można dopatrzeć się trzech, wliczając brązowe karły, pików. Odpowiadają one: gazowym i lodowym gigantom, super-ziemiom oraz brązowym karłom.

Histogram[{Log10[ρ2015],Log10[ρ2025]},64]

rUS=(PlanetData[#,"Radius"]&)/@planetyUkladSloneczny

rJ=PlanetData[planetyUkladSloneczny[[5]],"Radius"]

rUSJ=rUS/rJ

rmUSJ=Table[Log10@{{rUSJ[[k]],mUSJ[[k]]}},{k,{1,3,4,5,6,8}}];

w2a=ListPlot[rmUSJ,PlotMarkers->{"\nMercury","\nEarth","\nMars","\nJupiter","\nSaturn","\nNeptun"},PlotStyle->Black,BaseStyle->FontSize->18];

w2b=ListPlot[rmUSJ,PlotStyle->Red,PlotMarkers->"+",BaseStyle->FontSize->32];

w2c=ListPlot[{Log10[{r2015,m2015}//Transpose],Log10[{r2025,m2025}//Transpose]},BaseStyle->{PointSize->1/256,Black}]

w2d=Plot[ {3 lgR + Log10[5514/1326],3 lgR+Log10[687/1326],3 lgR+Log10[20000/1326]},{lgR,-3,3},PlotStyle->{Thin},Filling->{2->{1}}]

Znacznie lepszy obraz sytuacji demonstruje wykres M(R) (masa-promień). Dwa zgrupowania są ewidentne. Istnienie obiektów o bardzo dużych gęstościach i małych masach (słabej samograwitacji) typowo wyjaśniamy sporymi błędami pomiarowymi.

w2=Show[w2c,w2a,w2b,w2d,Frame->True,Axes->None,Epilog->{Arrow[{{-0.5,-3},{-0.9,0}}],Text["avg. density",{-0.5,-3}],Text[Rotate["ρ Au/W 20 g/cc",0.55],{-0.4,0}]},FrameLabel->{"(Subscript[log, 10])( R/(Subscript[R, J]))","(Subscript[log, 10])( M/(Subscript[M, J]))"},BaseStyle->FontSize->22,ImageSize->600]

(*Export["rhoExoplanet2024.pdf",w2,ImageResolution->600,ImageSize->900]*)
(*Export["rhoExoplanet2024.png",w2,ImageResolution->1200,ImageSize->900,RasterSize->1600]*)

e2015=egzo2015[[;;,14]];
(*e2016=egzo2016[[;;,14]];*)
e2025=egzo2025[[;;,18]];

Select[egzo2025,#[[18]]>1&] (* Oumuamua oraz Borisov (obiekty międzygwiezdne) także wypadły z katalogu 2025 *)

eUS=(PlanetData[#,"Eccentricity"]&)/@planetyUkladSloneczny

tics1={{-4.9,"(10^(-∞))"},{-3,"(10^(-3))"},{-2,0.01},{-1,0.1},{Log10@0.2,0.2},{Log10@0.5,0.5},{0,1}};

tics2={{Log10@eUS[[1]],Rotate["Merkury",Pi/2]},{Log10@0.01671022`8.,Rotate["Ziemia",Pi/2]},{Log10@0.00677323`6.,Rotate["Wenus\n",Pi/2]},{Log10@0.09341233`8.,Rotate["Mars",Pi/2]},{Log10@0.04839266`8.,Rotate["Jowisz",Pi/2]},{Log10@0.00858587`6.,Rotate["Neptun",Pi/2]},{Log10@1.196`,Rotate["Oumuamua",-Pi/2]},{Log10@3.155`,Rotate["2I/Borisov",-Pi/2]}};

Ekscentryczność orbit egzoplanet jest jednym z zupełnie nieoczekiwanych rezultatów. W Układzie Słonecznym orbity są de facto kołowe, za wyjątkiem Merkurego z e=0.2. Tymczasem dla egzoplanet, e=0.2 jest wartością TYPOWĄ, i nie jest niczym dziwnym napotkanie znacznie większych mimośrodów!

w3=Histogram[{Legended[Log10@(e2015/.{0.->10^-5}),"2015"],Legended[Log10@(e2025/.{0.->10^-5}),"2025"]},32,FrameTicks->{{All,None},{tics1,tics2}},Frame->True,BaseStyle->FontSize->24,FrameLabel->{"Ekscentryczność orbity","Ilość planet" },FrameTicksStyle->Directive[FontSize->12,FontColor->Black],ImageSize->600]

W 2025 roku na histogramie pojawiły się 2 dziwaczne ezgoplanety. Obie w układach pulsarów (gwiazd neutronowych).

head[[18]]

e2025//Sort//DeleteDuplicates

Position[e2025,3.`*^-7]

egzo2025[[5064]]

egzo2025[[5072]]

(*Export["eEgzoplanet2024.pdf",w3,ImageResolution->600,ImageSize->900]*)
(*Export["eEgzoplanet2024.png",w3,ImageResolution->600,ImageSize->900]*)

Innym sposobem patrzenia na egzoplanety, bardzo popularnym w egzobiologii, jest policzenie ich temperatury równowagowej (ekosfery). Jak pamiętamy, potrzeba do tego promienia i temperatury efektywnej gwiazdy.

Position[head,"star_radius"]

rStar2015=egzo2015[[;;,74]]*0.0046491;
(*rStar2016=egzo2016[[;;,74]]*0.0046491;*)
rStar2025=egzo2025[[;;,86]]*0.0046491;

Position[head,"star_teff"]

Teff2015=egzo2015[[;;,77]];
(*Teff2016=egzo2016[[;;,77]];*)
Teff2025=egzo2025[[;;,93]];

Position[head,"semi_major_axis"]

tempUS=(PlanetData[#,"EffectiveTemperature"]&)/@planetyUkladSloneczny//QuantityMagnitude

a2015=egzo2015[[;;,11]];
(*a2016=egzo2016[[;;,11]];*)
a2025=egzo2025[[;;,15]];

temp2015=Select[Sqrt[rStar2015/a2015/2]Teff2015,55<#<8000&];
(*temp2016=Select[Sqrt[rStar2016/a2016/2]Teff2016,55<#<8000&];*)
temp2025=Select[Sqrt[rStar2025/a2025/2]Teff2025,55<#<8000&];

tics1={{3,"(10^3)"},{2,100},{Log10@200,200},{Log10@300,300},{0,1}};

tics2={{Log10@5000,Rotate["Słońce",Pi/2]},{Log10@tempUS[[1]],Rotate["Merkury",Pi/2]},{Log10@tempUS[[3]],Rotate["Ziemia",Pi/2]},{Log10@tempUS[[4]],Rotate["Mars",Pi/2]},{Log10@tempUS[[5]],Rotate["Jowisz",Pi/2]},{Log10@tempUS[[6]],Rotate["Saturn",Pi/2]},{Log10@tempUS[[8]],Rotate["Neptun",Pi/2]}};

Wyniki pokazane poniżej są z perspektywy poszukiwania życia czy równania Drake’a niezbyt zachęcające. Większość egzoplanet jest bardziej gorąca niż Merkury! Typowa temperatura to 1000 K. Należy jednak pamiętać, że planety które są BLIŻEJ swojej gwiazdy i mają krótki okres orbitalny znacznie łatwiej wykryć.

w4=Histogram[{Legended[Log10@temp2015,"2015"],Legended[Log10@temp2025,"2025"]},16,FrameTicks->{{All,None},{tics1,tics2}},Frame->True,BaseStyle->FontSize->24,FrameLabel->{"Temperatura efektywna planety[K]","Ilość planet" },FrameTicksStyle->Directive[FontSize->12,FontColor->Black],ImageSize->600]

(*Export["teffEgzoplanet2024.pdf",w4,ImageResolution->600,ImageSize->900]*)
(*Export["teffEgzoplanet2024.png",w4,ImageResolution->600,ImageSize->900]*)

Jeszcze innym sposobem popatrzenia na katalog planet, to policzenie rozmiaru kątowego jaki na ich niebie zajmuje gwiazda centralna. JAk wcześniej pokazaliśmy, jej rozmiar kątowy jest bardzo dobrym wskaźnikiem sił pływowych.

tics1={{Log10@5,"5'"},{Log10@60,"(1^∘)"},{Log10@10,"10'"},{0,"1'"},{Log10@300,"(5^∘)"},{Log10@1800,"(30^∘)"}};

tics2={{0,Rotate["Neptun",Pi/2]},{Log10@5,Rotate["Jowisz",Pi/2]},{Log10@30,Rotate["Ziemia",Pi/2]},{Log10@90,Rotate["Merkury",Pi/2]}};

Ponownie okazuje się, że rozmiar kątowy ,,słońca’’ na niebie, a tym samym siły pływowe są ZNACZNIE więsze niż gdziekolwiek w Układzie Słonecznym (poza księzycami Jowisza/Saturna). Oznacza to m.in. że większość znanych egzoplanet musi mieć obrót synchroniczny z okresem orbitalnym. Znane egzoplanety są więc zwrócone w stronę gwiazdy centralnej stale tą samą stroną!

w5=Histogram[{Legended[Log10[2rStar2015/a2015*180/Pi*60],"2015"],Legended[Log10[2rStar2025/a2025*180/Pi*60],"2025"]},32,FrameTicks->{{All,None},{tics1,tics2}},Frame->True,BaseStyle->FontSize->24,FrameLabel->{"Średnica kątowa tarczy gwiazdy/siła pływowa","Ilość planet" },FrameTicksStyle->Directive[FontSize->12,FontColor->Black],ImageSize->600]

(*Export["tarczaEgzoplanet2024.pdf",w5,ImageResolution->600,ImageSize->900]*)
(*Export["tarczaEgzoplanet2024.png",w5,ImageResolution->600,ImageSize->900]*)

tics1={{-2,0.01},{-1,0.1},{0,1},{1,10},{2,100}};

tics2={{Log10@30,Rotate["Neptun",Pi/2]},{Log10@5.2,Rotate["Jowisz",Pi/2]},{0,Rotate["Ziemia",Pi/2]},{Log10@0.4,Rotate["Merkury",Pi/2]},{Log10[(7/1500)],Rotate["(Subscript[R, ⊙])",Pi/2]}};

Kolejny bardzo ważny wynik: większość znanych egzoplanet, po przeniesieniu do Układu Słonecznego, znalazłaby się WEWNĄTRZ orbity Merkurego!

w6=Histogram[{Legended[Log10@a2015,"2015"],Legended[Log10@a2025,"2025"]},32,FrameTicks->{{All,None},{tics1,tics2}},Frame->True,BaseStyle->FontSize->24,FrameLabel->{"Wielka półoś orbity [AU]","Ilość planet" },FrameTicksStyle->Directive[FontSize->12,FontColor->Black],ImageSize->600]

(*Export["aEgzoplanet2024.pdf",w6,ImageResolution->600,ImageSize->900]*)
(*Export["aEgzoplanet2024.png",w6,ImageResolution->600,ImageSize->900]*)

Position[head,"orbital_period"]

T2015=egzo2015[[;;,8]];

T2025=egzo2025[[;;,12]];

tics1={{-2,0.01},{-1,0.1},{0,1},{1,10},{2,100}};

tics2={{Log10@0.11719731816740528`,Rotate["Słońce\n(fotosfera)",Pi/2]},{Log10@60223.35,Rotate["Neptun",Pi/2]},{Log10[11.2*365.25],Rotate["Jowisz",Pi/2]},{Log10@365,Rotate["Ziemia",Pi/2]},{Log10@88,Rotate["Merkury",Pi/2]}};

Okresy skatalogowanych egzoplanet są typowo pomiedzy 1 a 10 dni. W niektórych przypadkach okres orbitalny jest PONIŻEJ krytycznej wartości rotującego modelu Roche’a dla Słońca! Faktycznie gwiazdy macierzyste często są znacznie mniejsze od Słońca.

w8=Histogram[{Legended[Log10@T2015,"2015"],Legended[Log10@T2025,"2025"]},FrameTicks->{{All,None},{tics1,tics2}},Frame->True,BaseStyle->FontSize->24,FrameLabel->{"Okres orbitalny [dni]","Ilość planet" },FrameTicksStyle->Directive[FontSize->12,FontColor->Black],ImageSize->600]

(*Export["okresEgzoplanet2024.pdf",w8,ImageResolution->600,ImageSize->900]*)

tics1={{-2,0.01},{-1,0.1},{0,1},{1,10},{2,100},{3,1000}};

Gdy narysujemy jakieś parametry znanych egzoplanet, wyraźnie wydają się one grupować. Naiwne rozumowanie skłania nas do powiązania widocznych grup z fizycznymi czy ewolucyjnymi cechami badanych układów planetarnych. Jest jednak znacznie mniej spektakularny powód grupowania: BIAS obserwacyjny!

w7b=ListPlot[{Log10@a2025,Log10@m2025}//Transpose,FrameTicks->{{tics1,None},{tics1,None}},Frame->True,BaseStyle->FontSize->16,FrameLabel->{"Wielka półoś orbity a [AU]","M [(Subscript[M, J])]" },Axes->False,PlotRange->{{-2,3},{-3,2}},(*Epilog->{{Opacity[0.2],Disk[{-0.9,-1.5},1]},{Opacity[0.2],Disk[{-1.3,0.0},0.5]},{Opacity[0.2],Disk[{0.2,0.5},1]},{Opacity[0.2],Disk[{2,1},1]}},*)AspectRatio->1]

dtype=Position[head,"detection_type"][[1,1]]

egzo2025[[1;;,dtype]]//DeleteDuplicates//TableForm

egzo2025RV=Select[egzo2025,#[[dtype]]=="Radial Velocity"&];

Length[egzo2025RV]

egzo2025T=Select[egzo2025,#[[dtype]]=="Primary Transit"&];

egzo2025T//Length

egzo2025A=Select[egzo2025,#[[dtype]]=="Astrometry"&];

Length[egzo2025A]

egzo2025I=Select[egzo2025,#[[dtype]]=="Imaging"||#[[dtype]]=="Astrometry"&];

Length[egzo2025I]

m2025RV=egzo2025RV[[;;,3]];

a2025RV=egzo2025RV[[;;,15]];

m2025T=egzo2025T[[;;,3]];

a2025T=egzo2025T[[;;,15]];

m2025I=egzo2025I[[;;,3]];

a2025I=egzo2025I[[;;,15]];

?Tooltip

Po narysowaniu analogicznego jak wyżej wykresu, ale z kolorami kodującymi metodę użytą do wykrycia egzoplanety, widać wyraźnie, że:

	1. Metoda tranzytów (zaćmień) wykrywa planety bardzo blisko gwiazdy.
	2. Metoda prędkości radialnych wykrywa głównie bardzo masywne planety.
	3. Metoda  bezpośredniego obrazowania (po prostu fotografia planety) pozwala na obserwację jedynie najmasywniejszych i bardzo odległych od gwiazdy centralnej planet.
	4. Itd.

w7c=ListPlot[{
Thread[Tooltip[{Log10@a2025RV,Log10@m2025RV}//Transpose, egzo2025RV[[1;;,1]]]],
{Log10@a2025T,Log10@m2025T}//Transpose,
AssociationThread[egzo2025I[[All,1]]->({Log10@a2025I,Log10@m2025I}//Transpose)]
},
PlotStyle->{Red,{Tiny,Green,Opacity[0.6]},Blue},
FrameTicks->{{tics1,None},{tics1,None}},Frame->True,BaseStyle->FontSize->16,FrameLabel->{"a [AU]","M [(Subscript[M, J])]" },Axes->False,PlotRange->{{-2.5,3},{-3,2}},AspectRatio->1,Epilog->{Text["Prędkość radialna",{2,-1},BaseStyle->Red],Text["Zaćmienia/tranzyty",{2,-1.5},BaseStyle->Green],Text["Bezpośrednia obserwacja",{1.8,-2},BaseStyle->Blue]},ImageSize->500]

Warto zwrócić uwagę na konwencję nazewnictwa egzoplanet:

Nazwa Gwiazdy [Składnik] [a]bcdef...

Najpierw jest nazwa gwiazdy, potem z wielkiej litery ewentualny identyfikator gwiazdy w systemie podwójnym lub wielokrotnym, następnie literki zaczynając od b. Literka “a” jest zarezerwowana dla samej gwiazdy. Kolejne literki c,d,e,... to kolejne planety wg. daty odkrycia! Nie jest to kolejność planet w układzie planetarnym. 

Przykład: GJ 2030 Ac: gwiazda podwójna GJ 2030, składnik A, planeta c (czyli druga w kolejności odkrycia).